home *** CD-ROM | disk | FTP | other *** search
/ Aminet 3 / Aminet 3 - July 1994.iso / Aminet / util / misc / aterminfo.lha / curses.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-09-18  |  15.3 KB  |  438 lines

  1.  
  2. /* This work is copyrighted. See COPYRIGHT.OLD & COPYRIGHT.NEW for   *
  3. *  details. If they are missing then this copy is in violation of    *
  4. *  the copyright conditions.                                        */
  5.  
  6. #ifndef __NCURSES_H
  7. #define __NCURSES_H
  8. #define CURSES 1
  9. #define CURSES_H 1
  10.  
  11. #include <stdio.h>
  12.  
  13. /*#include "unctrl.h"*/
  14.  
  15. #define bool    char
  16.  
  17. typedef unsigned long  chtype;
  18.  
  19. /* attributes */
  20. #define A_ATTRIBUTES    0xffffff00
  21. #define A_NORMAL    0x00000000
  22. #define A_STANDOUT    0x00010000
  23. #define A_UNDERLINE    0x00020000
  24. #define A_REVERSE    0x00040000
  25. #define A_BLINK        0x00080000
  26. #define A_DIM        0x00100000
  27. #define A_BOLD        0x00200000
  28. #define A_ALTCHARSET    0x00400000
  29. #define A_INVIS        0x00800000
  30. #define A_PROTECT    0x01000000
  31. #define A_CHARTEXT    0x000000ff
  32. #define A_COLOR        0x0000ff00
  33. #define COLOR_PAIR(n)    (n << 8)
  34. #define PAIR_NUMBER(a)    ((a & A_COLOR) >> 8)
  35.  
  36. /* colors */
  37. extern int COLORS;
  38. extern int COLOR_PAIRS;
  39. extern unsigned char color_pairs[];
  40.  
  41. #define COLOR_BLACK    0
  42. #define COLOR_RED    1
  43. #define COLOR_GREEN    2
  44. #define COLOR_YELLOW    3
  45. #define COLOR_BLUE    4
  46. #define COLOR_MAGENTA    5
  47. #define COLOR_CYAN    6
  48. #define COLOR_WHITE    7
  49.  
  50. /* line graphics */
  51.  
  52. extern     chtype acs_map[];
  53.  
  54.  
  55. #define ACS_ULCORNER    (acs_map['l'])
  56. #define ACS_LLCORNER    (acs_map['m'])
  57. #define ACS_URCORNER    (acs_map['k'])
  58. #define ACS_LRCORNER    (acs_map['j'])
  59. #define ACS_RTEE    (acs_map['u'])
  60. #define ACS_LTEE    (acs_map['t'])
  61. #define ACS_BTEE    (acs_map['v'])
  62. #define ACS_TTEE    (acs_map['w'])
  63. #define ACS_HLINE    (acs_map['q'])
  64. #define ACS_VLINE    (acs_map['x'])
  65. #define ACS_PLUS    (acs_map['n'])
  66. #define ACS_S1        (acs_map['o'])    /* scan line 1 */
  67. #define ACS_S9        (acs_map['s'])    /* scan line 9 */
  68. #define ACS_DIAMOND    (acs_map['`'])    /* diamond */
  69. #define ACS_CKBOARD    (acs_map['a'])    /* checker board (stipple) */
  70. #define ACS_DEGREE    (acs_map['f'])    /* degree symbol */
  71. #define ACS_PLMINUS    (acs_map['g'])    /* plus/minus */
  72. #define ACS_BULLET    (acs_map['~'])    /* bullet */
  73. #define ACS_LARROW    (acs_map[','])    /* arrow pointing left */
  74. #define ACS_RARROW    (acs_map['+'])    /* arrow pointing right */
  75. #define ACS_DARROW    (acs_map['.'])    /* arrow pointing down */
  76. #define ACS_UARROW    (acs_map['-'])    /* arrow pointing up */
  77. #define ACS_BOARD    (acs_map['h'])    /* board of squares */
  78. #define ACS_LANTERN    (acs_map['i'])    /* lantern symbol */
  79. #define ACS_BLOCK    (acs_map['0'])    /* solid square block */
  80.  
  81. #ifndef TRUE
  82. #  define TRUE    (1)
  83. #  define FALSE   (0)
  84. #endif
  85.  
  86. #define ERR     (-1)
  87. #define OK      (0)
  88.  
  89. #define _SUBWIN         0x01
  90. #define _ENDLINE        0x02
  91. #define _FULLWIN        0x04
  92. #define _SCROLLWIN      0x08
  93. #define _ISPAD        0x10
  94. #define _HASMOVED    0x20
  95.  
  96. #define _NOCHANGE       -1
  97.  
  98. typedef struct screen  SCREEN;
  99. typedef struct _win_st WINDOW;
  100.  
  101. struct _win_st {
  102.     short   _cury, _curx;
  103.     short   _maxy, _maxx;
  104.     short   _begy, _begx;
  105.     short   _flags;
  106.     chtype  _attrs;
  107.     chtype  _bkgd;
  108.     bool    _notimeout;
  109.     bool    _use_idc;
  110.     bool    _clear;
  111.     bool    _leave;
  112.     bool    _scroll;
  113.     bool    _idlok;
  114.     bool    _immed;
  115.     bool    _sync;
  116.     bool    _use_keypad;    /* 0=no, 1=yes */
  117.     bool    _use_meta;      /* T=use the meta key */
  118.     int    _delay;        /* 0 = nodelay
  119.                      <0 = blocking
  120.                      >0 = delay */
  121.     chtype  **_line;
  122.     short   *_firstchar;    /* First changed character in the line */
  123.     short   *_lastchar;     /* Last changed character in the line */
  124.     short    _regtop;    /* Top and bottom of scrolling region */
  125.     short    _regbottom;
  126.     int    _parx;
  127.     int    _pary;
  128.     WINDOW    *_parent;    /* parent if a sub-window */
  129. };
  130.  
  131. #ifndef _AMIGA
  132. WINDOW    *stdscr, *curscr;
  133. #endif
  134.  
  135. extern int tigetflag(char *);
  136. extern int tigetnum(char *);
  137. extern char *tigetstr(char *);
  138.  
  139. #ifdef TRACE
  140. extern void _init_trace(void);
  141. extern void _tracef(char *, ...);
  142. extern void traceon(void);
  143. extern void traceoff(void);
  144. #endif
  145. extern int baudrate(void);
  146. extern int beep(void);
  147. extern int cbreak(void);
  148. extern int clearok(WINDOW *,int);
  149. extern int crmode(void);
  150. extern int curs_set(int);
  151. extern int def_prog_mode(void);
  152. extern int def_shell_mode(void);
  153. extern int delwin(WINDOW *);
  154. extern WINDOW *derwin(WINDOW *,int,int,int,int);
  155. extern int doupdate(void);
  156. extern int echo(void);
  157. extern int endwin(void);
  158. extern char erasechar(void);
  159. extern int flash(void);
  160. extern int flushinp(void);
  161. extern int idlok(WINDOW *,int);
  162. extern WINDOW *initscr(void);
  163. extern int is_linetouched(WINDOW *,int);
  164. extern int is_wintouched(WINDOW *);
  165. extern int isendwin(void);
  166. extern int keypad(WINDOW *,int);
  167. extern char killchar(void);
  168. extern int leaveok(WINDOW *,int);
  169. extern char *longname(void);
  170. extern int meta(WINDOW *,int);
  171. extern int mvcur(int,int,int,int);
  172. extern int mvprintw(int,int,const char *,...);
  173. extern int mvscanw(int,int,char *,...);
  174. extern int mvwin(WINDOW *,int,int);
  175. extern int mvwprintw(WINDOW *,int,int,const char *,...);
  176. extern int mvwscanw(WINDOW *,int,int,char *,...);
  177. extern WINDOW *newpad(int,int);
  178. extern SCREEN *newterm(char *,FILE *,FILE *);
  179. extern WINDOW *newwin(int,int,int,int);
  180. extern int nl(void);
  181. extern int nocbreak(void);
  182. extern int nocrmode(void);
  183. extern int nodelay(WINDOW *,int);
  184. extern int noecho(void);
  185. extern int nonl(void);
  186. extern int noraw(void);
  187. extern int overlay(WINDOW *,WINDOW *);
  188. extern int pnoutrefresh(WINDOW *,int,int,int,int,int,int);
  189. extern int overwrite(WINDOW *,WINDOW *);
  190. extern int printw(const char *,...);
  191. extern int putp(char *);
  192. extern int raw(void);
  193. extern int resetty(void);
  194. extern int savetty(void);
  195. extern int scanw(char *,...);
  196. extern int scrollok(WINDOW *,int);
  197. extern SCREEN *set_term(SCREEN *);
  198. extern int setupterm(char *,int,int *);
  199. extern WINDOW *subwin(WINDOW *,int,int,int,int);
  200. extern char *tgoto(char *,int,int);
  201. extern char *tparm(char *, ...);
  202. extern int tputs(char *,int,int (*)(char));
  203. extern int vidattr(chtype);
  204. extern int vidputs(chtype,int (*)(char));
  205. extern int waddch(WINDOW *,chtype);
  206. extern int waddchnstr(WINDOW *,chtype *,int);
  207. extern int waddnstr(WINDOW *,char *,int);
  208. extern int wattron(WINDOW *,chtype);
  209. extern int wborder(WINDOW *,chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype);
  210. extern int wclear(WINDOW *);
  211. extern int wclrtobot(WINDOW *);
  212. extern int wclrtoeol(WINDOW *);
  213. extern int wdelch(WINDOW *);
  214. extern int wdeleteln(WINDOW *);
  215. extern int werase(WINDOW *);
  216. extern int wgetch(WINDOW *);
  217. extern int wgetstr(WINDOW *,char *);
  218. extern int whline(WINDOW *,chtype,int);
  219. extern int winsch(WINDOW *,char);
  220. extern int winsertln(WINDOW *);
  221. extern int wmove(WINDOW *,int,int);
  222. extern int wnoutrefresh(WINDOW *);
  223. extern int wprintw(WINDOW *,const char *,...);
  224. extern int wrefresh(WINDOW *);
  225. extern int wscanw(WINDOW *,char *,...);
  226. extern int wscrl(WINDOW *,int);
  227. extern int wsetscrreg(WINDOW *,int,int);
  228. extern int wtouchln(WINDOW *,int,int,int);
  229. extern int wvline(WINDOW *,chtype,int);
  230.  
  231. extern bool can_change_color(void);
  232. extern int color_content(short,short *,short *, short *);
  233. extern int has_colors(void);
  234. extern int init_color(short,short,short,short);
  235. extern int init_pair(short,short,short);
  236. extern int pair_content(short,short*,short*);
  237. extern int start_color(void);
  238.  
  239. extern int slk_init(int);
  240. extern int slk_set(int,const char *,int);
  241. extern int slk_refresh(void);
  242. extern int slk_noutrefresh(void);
  243. extern char *slk_label(int);
  244. extern int slk_clear(void);
  245. extern int slk_restore(void);
  246. extern int slk_touch(void);
  247.  
  248. /*
  249.  * psuedo functions
  250.  */
  251.  
  252. #define napms(x)        usleep(1000*x)
  253.  
  254. #define reset_prog_mode()
  255. #define reset_shell_mode()
  256. #define fixterm()
  257. #define resetterm()
  258. #define saveterm()
  259.  
  260. #define getyx(win,y,x)       (y = (win)->_cury, x = (win)->_curx)
  261. #define getbegyx(win,y,x)    (y = (win)->_begy, x = (win)->_begx)
  262. #define getmaxyx(win,y,x)    (y = (win)->_maxy + 1, x = (win)->_maxx + 1)
  263.  
  264. #define winch(win)           ((win)->_line[(win)->_cury][(win)->_curx])
  265. #define wstandout(win)          (wattrset(win,A_STANDOUT))
  266. #define wstandend(win)          (wattrset(win,A_NORMAL))
  267. #define wattroff(win,at)        ((win)->_attrs &= ~(at))
  268. #define wattrset(win,at)        ((win)->_attrs = (at))
  269.  
  270. #define subpad(p,l,c,y,x)    derwin(p,l,c,y,x)
  271. #define scroll(win)        wscrl(win,1)
  272.  
  273. #define touchwin(win)        wtouchln((win), 0, (win)->_maxy, 1)
  274. #define touchline(win, s, c)    wtouchln((win), s, c, 1)
  275. #define untouchwin(win)        wtouchln((win), 0, (win)->_maxy, 0)
  276.  
  277.  
  278. #define box(win, v, h)        wborder(win, v, v, h, h, 0, 0, 0, 0)
  279. #define border(ls, rs, ts, bs, tl, tr, bl, br)    wborder(stdscr, ls, rs, ts, bs, tl, tr, bl, br)
  280. #define hline(ch, n)        whline(stdscr, ch, n)
  281. #define vline(ch, n)        wvline(stdscr, ch, n)
  282.  
  283. /*
  284.  * psuedo functions for standard screen
  285.  */
  286.  
  287. #define inch()               winch(stdscr)
  288. #define standout()             wstandout(stdscr)
  289. #define standend()             wstandend(stdscr)
  290. #define attron(at)             wattron(stdscr,at)
  291. #define attroff(at)            wattroff(stdscr,at)
  292. #define attrset(at)            wattrset(stdscr,at)
  293. #define addch(ch)              waddch(stdscr,ch)
  294. #define getch()                wgetch(stdscr)
  295. #define addstr(str)            waddnstr(stdscr,str,-1)
  296. #define getstr(str)            wgetstr(stdscr,str)
  297. #define move(y, x)             wmove(stdscr,y,x)
  298. #define clear()                wclear(stdscr)
  299. #define erase()                werase(stdscr)
  300. #define clrtobot()             wclrtobot(stdscr)
  301. #define clrtoeol()             wclrtoeol(stdscr)
  302. #define insertln()             winsertln(stdscr)
  303. #define deleteln()             wdeleteln(stdscr)
  304. #define refresh()              wrefresh(stdscr)
  305. #define insch(c)               winsch(stdscr,c)
  306. #define delch()                wdelch(stdscr)
  307. #define setscrreg(t,b)         wsetscrreg(stdscr,t,b)
  308. #define scrl(n)            wscrl(stdscr,n)
  309. #define timeout(delay)        wtimeout(stdscr, delay)
  310. #define waddstr(win,str)    waddnstr(win,str,-1)
  311. #define waddchstr(win,str)    waddchnstr(win,str,-1)
  312.  
  313. /*
  314.  * mv functions
  315. */
  316.  
  317. #define mvwaddch(win,y,x,ch)        (wmove(win,y,x) == ERR ? ERR : waddch(win,ch))
  318. #define mvwgetch(win,y,x)           (wmove(win,y,x) == ERR ? ERR : wgetch(win))
  319. #define mvwaddchnstr(win,y,x,str,n)    (wmove(win,y,x) == ERR ? ERR : waddchnstr(win,str,n)
  320. #define mvwaddchstr(win,y,x,str)      (wmove(win,y,x) == ERR ? ERR : waddchnstr(win,str,-1))
  321. #define mvwaddnstr(win,y,x,str,n)    (wmove(win,y,x) == ERR ? ERR : waddnstr(win,str,n)
  322. #define mvwaddstr(win,y,x,str)      (wmove(win,y,x) == ERR ? ERR : waddnstr(win,str,-1))
  323. #define mvwgetstr(win,y,x)          (wmove(win,y,x) == ERR ? ERR : wgetstr(win))
  324. #define mvwinch(win,y,x)            (wmove(win,y,x) == ERR ? ERR : winch(win))
  325. #define mvwdelch(win,y,x)           (wmove(win,y,x) == ERR ? ERR : wdelch(win))
  326. #define mvwinsch(win,y,x,c)         (wmove(win,y,x) == ERR ? ERR : winsch(win,c))
  327. #define mvaddch(y,x,ch)             mvwaddch(stdscr,y,x,ch)
  328. #define mvgetch(y,x)                mvwgetch(stdscr,y,x)
  329. #define mvaddnstr(y,x,str,n)        mvwaddnstr(stdscr,y,x,str,n)
  330. #define mvaddstr(y,x,str)           mvwaddstr(stdscr,y,x,str)
  331. #define mvgetstr(y,x)               mvwgetstr(stdscr,y,x)
  332. #define mvinch(y,x)                 mvwinch(stdscr,y,x)
  333. #define mvdelch(y,x)                mvwdelch(stdscr,y,x)
  334. #define mvinsch(y,x,c)              mvwinsch(stdscr,y,x,c)
  335.  
  336. /* Funny "characters" enabled for various special function keys for input */
  337. /* Whether such a key exists depend if its definition is in the terminfo entry */
  338.  
  339. #define KEY_BREAK       0401            /* break key (unreliable) */
  340. #define KEY_DOWN        0402            /* The four arrow keys ... */
  341. #define KEY_UP          0403
  342. #define KEY_LEFT        0404
  343. #define KEY_RIGHT       0405            /* ... */
  344. #define KEY_HOME        0406            /* Home key (upward+left arrow) */
  345. #define KEY_BACKSPACE   0407            /* backspace (unreliable) */
  346. #define KEY_F0          0410            /* Function keys.  Space for 64 */
  347. #define KEY_F(n)        (KEY_F0+(n))    /* keys is reserved. */
  348. #define KEY_DL          0510            /* Delete line */
  349. #define KEY_IL          0511            /* Insert line */
  350. #define KEY_DC          0512            /* Delete character */
  351. #define KEY_IC          0513            /* Insert char or enter insert mode */
  352. #define KEY_EIC         0514            /* Exit insert char mode */
  353. #define KEY_CLEAR       0515            /* Clear screen */
  354. #define KEY_EOS         0516            /* Clear to end of screen */
  355. #define KEY_EOL         0517            /* Clear to end of line */
  356. #define KEY_SF          0520            /* Scroll 1 line forward */
  357. #define KEY_SR          0521            /* Scroll 1 line backwards (reverse) */
  358. #define KEY_NPAGE       0522            /* Next page */
  359. #define KEY_PPAGE       0523            /* Previous page */
  360. #define KEY_STAB        0524            /* Set tab */
  361. #define KEY_CTAB        0525            /* Clear tab */
  362. #define KEY_CATAB       0526            /* Clear all tabs */
  363. #define KEY_ENTER       0527            /* Enter or send (unreliable) */
  364. #define KEY_SRESET      0530            /* soft (partial) reset (unreliable) */
  365. #define KEY_RESET       0531            /* reset or hard reset (unreliable) */
  366. #define KEY_PRINT       0532            /* print or copy */
  367. #define KEY_LL          0533            /* home down or bottom (lower left) */
  368.  
  369. /* The keypad is arranged like this: */
  370. /* a1    up    a3   */
  371. /* left   b2  right  */
  372. /* c1   down   c3   */
  373.  
  374. #define KEY_A1        0534    /* Upper left of keypad */
  375. #define KEY_A3        0535    /* Upper right of keypad */
  376. #define KEY_B2        0536    /* Center of keypad */
  377. #define KEY_C1        0537    /* Lower left of keypad */
  378. #define KEY_C3        0540    /* Lower right of keypad */
  379. #define KEY_BTAB    0541    /* Back tab key */
  380. #define KEY_BEG        0542    /* beg(inning) key */
  381. #define KEY_CANCEL    0543    /* cancel key */
  382. #define KEY_CLOSE    0544    /* close key */
  383. #define KEY_COMMAND    0545    /* cmd (command) key */
  384. #define KEY_COPY    0546    /* copy key */
  385. #define KEY_CREATE    0547    /* create key */
  386. #define KEY_END        0550    /* end key */
  387. #define KEY_EXIT    0551    /* exit key */
  388. #define KEY_FIND    0552    /* find key */
  389. #define KEY_HELP    0553    /* help key */
  390. #define KEY_MARK    0554    /* mark key */
  391. #define KEY_MESSAGE    0555    /* message key */
  392. #define KEY_MOVE    0556    /* move key */
  393. #define KEY_NEXT    0557    /* next object key */
  394. #define KEY_OPEN    0560    /* open key */
  395. #define KEY_OPTIONS    0561    /* options key */
  396. #define KEY_PREVIOUS    0562    /* previous object key */
  397. #define KEY_REDO    0563    /* redo key */
  398. #define KEY_REFERENCE    0564    /* ref(erence) key */
  399. #define KEY_REFRESH    0565    /* refresh key */
  400. #define KEY_REPLACE    0566    /* replace key */
  401. #define KEY_RESTART    0567    /* restart key */
  402. #define KEY_RESUME    0570    /* resume key */
  403. #define KEY_SAVE    0571    /* save key */
  404. #define KEY_SBEG    0572    /* shifted beginning key */
  405. #define KEY_SCANCEL    0573    /* shifted cancel key */
  406. #define KEY_SCOMMAND    0574    /* shifted command key */
  407. #define KEY_SCOPY    0575    /* shifted copy key */
  408. #define KEY_SCREATE    0576    /* shifted create key */
  409. #define KEY_SDC        0577    /* shifted delete char key */
  410. #define KEY_SDL        0600    /* shifted delete line key */
  411. #define KEY_SELECT    0601    /* select key */
  412. #define KEY_SEND    0602    /* shifted end key */
  413. #define KEY_SEOL    0603    /* shifted clear line key */
  414. #define KEY_SEXIT    0604    /* shifted exit key */
  415. #define KEY_SFIND    0605    /* shifted find key */
  416. #define KEY_SHELP    0606    /* shifted help key */
  417. #define KEY_SHOME    0607    /* shifted home key */
  418. #define KEY_SIC        0610    /* shifted input key */
  419. #define KEY_SLEFT    0611    /* shifted left arrow key */
  420. #define KEY_SMESSAGE    0612    /* shifted message key */
  421. #define KEY_SMOVE    0613    /* shifted move key */
  422. #define KEY_SNEXT    0614    /* shifted next key */
  423. #define KEY_SOPTIONS    0615    /* shifted options key */
  424. #define KEY_SPREVIOUS    0616    /* shifted prev key */
  425. #define KEY_SPRINT    0617    /* shifted print key */
  426. #define KEY_SREDO    0620    /* shifted redo key */
  427. #define KEY_SREPLACE    0621    /* shifted replace key */
  428. #define KEY_SRIGHT    0622    /* shifted right arrow */
  429. #define KEY_SRSUME    0623    /* shifted resume key */
  430. #define KEY_SSAVE    0624    /* shifted save key */
  431. #define KEY_SSUSPEND    0625    /* shifted suspend key */
  432. #define KEY_SUNDO    0626    /* shifted undo key */
  433. #define KEY_SUSPEND    0627    /* suspend key */
  434. #define KEY_UNDO    0630    /* undo key */
  435. #define KEY_MAX        0777    /* Maximum curses key */
  436.  
  437. #endif
  438.